package com.cs.deviceManager.device;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 设备类型管理器
 */
public class DeviceTypeManager {
    
    private static final Logger log = LoggerFactory.getLogger(DeviceTypeManager.class);
    
    // 设备类型常量
    public static final String DEVICE_TYPE_CS1000 = "CS1000";
    public static final String DEVICE_TYPE_IS0360A = "IS0360A";
    
    // 默认超时时间（秒）
    private static final long DEFAULT_TIMEOUT_SECONDS = 60;
    
    // 不同设备类型的超时时间配置（秒）
    private static final ConcurrentMap<String, Long> DEVICE_TYPE_TIMEOUTS = new ConcurrentHashMap<>();
    
    static {
        // CS1000设备超时时间30秒
        DEVICE_TYPE_TIMEOUTS.put(DEVICE_TYPE_CS1000, 30L);
        // IS0360A设备超时时间5小时
        DEVICE_TYPE_TIMEOUTS.put(DEVICE_TYPE_IS0360A, 30 * 60L);
    }
    
    /**
     * 获取设备类型的超时时间
     * @param deviceType 设备类型
     * @return 超时时间（秒）
     */
    public static long getDeviceTypeTimeout(String deviceType) {
        return DEVICE_TYPE_TIMEOUTS.getOrDefault(deviceType, DEFAULT_TIMEOUT_SECONDS);
    }
    
    /**
     * 设置设备类型的超时时间
     * @param deviceType 设备类型
     * @param timeoutSeconds 超时时间（秒）
     */
    public static void setDeviceTypeTimeout(String deviceType, long timeoutSeconds) {
        DEVICE_TYPE_TIMEOUTS.put(deviceType, timeoutSeconds);
        log.info("设置设备类型 {} 的超时时间为 {} 秒", deviceType, timeoutSeconds);
    }
    
    /**
     * 获取所有设备类型与超时时间的映射
     * @return 设备类型与超时时间映射
     */
    public static Map<String, Long> getDeviceTypeTimeoutMap() {
        return new ConcurrentHashMap<>(DEVICE_TYPE_TIMEOUTS);
    }
    
    /**
     * 添加新的设备类型
     * @param deviceType 设备类型
     * @param timeoutSeconds 超时时间（秒）
     */
    public static void addDeviceType(String deviceType, long timeoutSeconds) {
        DEVICE_TYPE_TIMEOUTS.put(deviceType, timeoutSeconds);
        log.info("添加设备类型 {}，超时时间 {} 秒", deviceType, timeoutSeconds);
    }
    
    /**
     * 移除设备类型
     * @param deviceType 设备类型
     */
    public static void removeDeviceType(String deviceType) {
        DEVICE_TYPE_TIMEOUTS.remove(deviceType);
        log.info("移除设备类型 {}", deviceType);
    }
}